<?php

/**
 * Description of UsuarioDAO
 *
 * @author Hiago
 */
class UsuarioDAO {

    public static function login($login, $senha) {
        $con = new bd();
        $stmt = $con->prepare("SELECT `usuario`.`idUsuario`, `usuario`.`login`,`usuario`.`senha`,
                              `usuario`.`id_permissao` FROM `usuario` where `usuario`.`login` = ? and usuario.senha = ?;");
        $stmt->execute(Array($login, $senha));
        $con->ocorreramErros($stmt);

        $r = $stmt->fetch();
        $permissaoDAO = new PermissaoDAO();
        $permissao = $permissaoDAO->getById($r[3]);
        return new Usuario($r[0], $r[1], $r[2], $permissao);
    }

    public static function inserir(Usuario $usuario) {
        $con = new bd();
        try {
            $con->beginTransaction();
            $stmt = $con->prepare("INSERT INTO `usuario` (`login`, `senha`, `id_permissao`) VALUES (?,?,?);");
            $permissao = $usuario->getPermissao();
            $dados = Array($usuario->getLogin(), $usuario->getSenha(), $usuario->getIdPermissao());
            $stmt->execute($dados);
            $id = $con->lastInsertId();
            $con->ocorreramErros($stmt);
            $usuario->setIdUsuario($id);
            $con->commit();
        } catch (Exception $ex) {
            $con->rollBack();
        }
    }

    public function atualizar(Usuario $usuario) {
        $con = new bd();
        $stmt = $con->prepare("UPDATE `usuario` SET `login` = ?, `senha` = ?, `id_permissao` = ?
                              WHERE `usuario`.`idUsuario` = ?;");
        $dados = Array($usuario->getLogin(), $usuario->getSenha(), $usuario->getPermissao()->getIdPermissao(), $usuario->getIdUsuario());
        $stmt->execute($dados);
        $con->ocorreramErros($stmt);
    }

    public function getById($id) {
        $con = new bd();
        $stmt = $con->prepare("SELECT `usuario`.`idUsuario`, `usuario`.`login`,`usuario`.`senha`,
                              `usuario`.`id_permissao` FROM `usuario` where `usuario`.`idUsuario` = ?;");
        $stmt->execute(Array($id));
        $con->ocorreramErros($stmt);

        $r = $stmt->fetch();
        $permissaoDAO = new PermissaoDAO();
        $permissao = $permissaoDAO->getById($r[3]);
        return new Usuario($r[0], $r[1], $r[2], $permissao);
    }

    public function listar() {
        $con = new bd();
        $stmt = $con->prepare("SELECT `usuario`.`idUsuario`, `usuario`.`login`,`usuario`.`senha`,
                              `usuario`.`id_permissao` FROM `usuario`");
        $stmt->execute();
        $con->ocorreramErros($stmt);

        $usuarios = Array();
        $permissaoDAO = new PermissaoDAO();
        while ($r = $stmt->fetch()) {
            $permissao = $permissaoDAO->getById($r[3]);
            $usuarios[] = new Usuario($r[0], $r[1], $r[2], $permissao);
        }
        return $usuarios;
    }

    public function excluir(Usuario $usuario) {
        $con = new bd();
        $stmt = $con->prepare("DELETE FROM `usuario` WHERE  `usuario`.`idUsuario`= ?;");

        $dados = Array($usuario->getIdUsuario());
        $stmt->execute($dados);
        $con->ocorreramErros($stmt);
    }

}

?>
